#!/bin/bash
echo "Параллельное выполнение скриптов и создание репозиториев для каталогов проектов."
# Для всех репозиториев на одном уровне с текущим формируем скрипт в одну строчку и выполняем эти скрипты в параллельном режиме.
# Скрипт в одну строчку — это выполнение одного из заранее подготовленных других скриптов для локальных и удалённых репозиториев.
# Формируем и выполняем скрипты в несколько шагов с разными параметрами и по дороге сохраняем отчёты о выполнении.
# Параллельное выполнение скриптов на последующем шаге начинается после завершения всех потоков на предыдущем шаге.
cd .. # выходим из папки в корень репозитория
currentTimeMillis=$(date '+%s%3N')
# 1 Удаление репозиториев на сервере
find .. -mindepth 1 -maxdepth 1 -type d -printf \
  'cd %h/%f && ./.repo_remote.sh "delete" >.repo_remote.log\0' | xargs -L1 -0 -P0 bash -c
# 2 Создание репозиториев на сервере
find .. -mindepth 1 -maxdepth 1 -type d -printf \
  'cd %h/%f && ./.repo_remote.sh "create" >>.repo_remote.log\0' | xargs -L1 -0 -P0 bash -c
# 3 Создание локальных репозиториев и отправка данных на сервер
# 4 Изменение настроек репозиториев на сервере, отключение ненужного
find .. -mindepth 1 -maxdepth 1 -type d -printf \
  'cd %h/%f && ./.repo_local.sh >.repo_local.log\0
  cd %h/%f && ./.repo_remote.sh "options" >>.repo_remote.log\0' | xargs -L1 -0 -P0 bash -c
echo "Общее время выполнения: $(("$(date '+%s%3N')" - "$currentTimeMillis")) мс."
